home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Revolution - Das Atari CD Magazin 1997
/
Revolution - Das Atari CD Magazin 1.iso
/
software
/
systems
/
big_dos
/
dateisys.txt
< prev
next >
Wrap
Text File
|
1996-08-09
|
11KB
|
237 lines
Dies und das zu den Dateisystemen ISO 9293, GEMDOS und MS-DOS
Copyright © 1995-07-02/1996-08-09 by Rainer Seitel
Diese Datei darf mit Quellenangabe ganz oder teilweise zitiert werden.
Bootsektor
----------
Aufbau eines Bootsektors nach Atari, MS-DOS und ISO 9293:
$00-$02 00-02 M68000- oder I8086-Sprungbefehl
MS-DOS will ab Laufwerk C: hier $EB $3C $90!
$03-$0A 03-10 Name des Initialisierungsprogrammes
Erlaubte Zeichen: » !"%&'()*+,-./0..9:;<=>?A..Z_«
$08-$0A 08-10 TOS erwartet hier eine Seriennummer zur
Diskwechselerkennung! Ab TOS 2 wird auch die
von MS-DOS geschriebene Seriennummer beachtet.
$0B-$0C 11-12 Sektorlänge
$0D 13 Sektoren je Cluster
$0E-$0F 14-15 Anzahl reservierter Sektoren einschließlich Bootsektor
$10 16 Anzahl der FATs (nach ISO immer 2)
$11-$12 17-18 Einträge im Wurzelverzeichnis
$13-$14 19-20 Gesamtzahl der Sektoren oder 0 bei mehr als 65535
$15 21 Datenträger-Kennzeichen, Media-Byte
$16-$17 22-23 Sektoren je FAT
$18-$19 24-25 Sektoren je Spur
$1A-$1B 26-27 Anzahl der Seiten
$1C-$1D 28-29 Anzahl versteckter Sektoren vor dem Bootsektor
Ab MS-DOS 4.0 gibt es den erweiterten BPB:
$1C-$1F 28-31 Anzahl versteckter Sektoren vor dem Bootsektor
$20-$23 32-35 Gesamtzahl der Sektoren wenn mehr als 65535
$24 36 physikalische Laufwerksnummer für MS-DOS
$25 37 für MS-DOS reserviert
$26 38 $29 kennzeichnet den erweiterten BPB
$27-$2A 39-42 Seriennummer, Zeitpunkt der Initialisierung
$2B-$35 43-53 Diskname wie im Wurzelverzeichnis
$36-$3D 54-61 Dateisystem: »FAT12 «, »FAT16 «
$3E-$FD 62-253 Boot-Programm
$FE-$FF 254-255 Atari: Ausgleich für Prüfsumme $1234 wenn bootfähig
MS-DOS: $55 $AA wenn bootfähig
Mac: muß bei Disketten $55 $AA sein, das ist ein Fehler!
/* Media-Byte und Format-Parameter für MS-DOS, Atari und DIN EN 29293 =
ISO 9293:1987. Nach ISO bedeutet das Media-Byte $FD Werte aus der Tabelle
benutzen und $F9 Werte aus dem Bootsektor lesen. Wenn 40-Spur-Disketten von
der Tabelle abweichen, dann ist das Media-Byte also $F9.
"ISO Typ ..." nach DIN EN 29983 = ISO/IEC 9983:1989.
Media-Byte Diskette Größe Formatierung Initialisierung
MS Atar ISO ISO Typ in mm (in) CYL NSIDES SPT BPS RES SPF SPR SPC Clust
$F0 $F0 $F9 303 90 (3,5 ) 80 2 36 512 1 9 15 2 2863
$F0 $F9 302 90 (3,5 ) 80 2 18 512 1 9 14 1 2847
$F0 302 90 (3,5 ) 80 2 18 512 1 6 14 2 1426
$F8 $F8 Festplatte
$F9 $F9 301 90 (3,5 ) 80 2 9 512 1 3 7 2 713
$F9 301 90 (3,5 ) 80 2 9 512 1 5 7 2 711
$F9 (301) 90 (3,5 ) 80 1 9 512 1 5 7 2 351
$F9 203 130 (5,25) 80 2 9 512 1 3 11 2 711
$F9 $F9 204 130 (5,25) 80 2 15 512 1 7 14 1 2371
$FC $FC (202) 130 (5,25) 40 1 9 512 1 2 4 1 351
$FD $FD $FD 202 130 (5,25) 40 2 9 512 1 2 7 2 354
$FE (202) 130 (5,25) 40 1 8 512 1 1 4 1 313
$FF (202) 130 (5,25) 40 2 8 512 1 1 7 2 315
*/
FATs
----
Die Einträge 0 und 1 enhalten das Media-Byte und $FF.
Die Werte in den Einträgen 2 bis Clusterzahl + 1 bedeuten:
$0000 freier Cluster
$0001 nicht möglich
$0002 bis (Clusterzahl + 1) nächster Cluster
(Clusterzahl + 2) bis $FFEF reserviert
$FFF0 bis $FFF6 verboten!
$FFF7 defekter Cluster
$FFF8 bis $FFFF Dateiende
Beschränkungen auf TOS-kompatiblen Rechnern
-------------------------------------------
DL_SECSIZ $4000 $4000 $4000 $8000? $8000 $8000 $8000
DL_MINFAT 2 2 1 1 1 2
DL_MAXFAT 2 2 2 2 2 2 2
DL_MINSPC 1 1 1 1 1 1 1
DL_MAXSPC 2 32 32 64 64 64
DL_CLUSTS $7FFE $7FFE $7FFE $7FFE $FFEE $7FFD
DL_MAXSEC $7FFF $FFFF $FFFF $FFFF $FFFFFF $FFFF $FFFF
DL_DRIVES 16 16 16 16 32 16 26
DL_CLSIZB $4000 $4000 $4000 $10000? $8000 $8000
DL_RDLEN 1008 1008 1008 1008? 2032 ?
DL_FSIZ 128 256 256 256 256 128 256
DL_FATREC ? ? ? ? 512 ?
DL_CLUSTS12 $7FE $FEE $FEE $FEE $FEE $FEE $FEE
DL_CLUSTS32 0 0 0 0 0 0 0
DL_BFLAGS 1 1 3 3 3 1
DL_FILESYS '_DOS' '_DOS' '_DOS' '_DOS' 'BDOS' 'MAGX' 'MAGX'
DL_VERSION 19950401 2 3
Sversion() 0.13 0.15 0.20 0.30 0.20
Ab TOS 1.00 1.04 2.06 4.04
Die Tabelle ist noch nicht vollständig. Über Ergänzungen freue ich mich.
Ab GEMDOS 0.15 (TOS 1.04) sind Partitionen mit mehr als 32767 Sektoren bzw.
32766 Cluster möglich. Wegen eines vorzeichenbehafteten Vergleichs in Ataris
GEMDOS < 0.30 ist es ratsam, einen bestimmten Cluster als defekt zu markieren:
Bei 1 Sektor pro Cluster den Cluster $7FFF = 32767.
Bei 2 Sektoren pro Cluster den Cluster $3FFF = 16383.
Bei 4 Sektoren pro Cluster den Cluster $1FFF = 8191.
Bei 8 Sektoren pro Cluster den Cluster $7FF = 4095.
Bei 16 Sektoren pro Cluster den Cluster $3FF = 2047.
Bei 32 Sektoren pro Cluster den Cluster $1FF = 1023.
Bei 64 Sektoren pro Cluster den Cluster $7F = 511.
Getbpb() (BIOS 7)
-----------------
Die Elemente »recsiz«, »clsizb« und »numcl« des BPB sind vorzeichenlose
16-Bit-Werte! »clsizb« nicht benutzen, sondern das 32-Bit-Ergebnis von
»recsiz * clsiz«.
Dcntl() von Big-DOS
-------------------
#define FUTIME (('F' << 8) | 3) /* Zeit des Verzeichnisses setzen */
/* Die Bezeichnungen XH_DL_... sind die der DOS-Limits aus xhdi.h (0 bis 7). */
#define DL_SECSIZ ('D' << 8 | XH_DL_SECSIZ) /* max. bpb->recsiz */
/* in Big-DOS z. Z.: 32768 = 16$8000 */
#define DL_MINFAT ('D' << 8 | XH_DL_MINFAT) /* min. Anzahl FATs */
/* in Big-DOS z. Z.: 1 */
#define DL_MAXFAT ('D' << 8 | XH_DL_MAXFAT) /* max. Anzahl FATs */
/* in Big-DOS z. Z.: 2 */
#define DL_MINSPC ('D' << 8 | XH_DL_MINSPC) /* min. bpb->clsiz */
/* in Big-DOS z. Z.: 1 */
#define DL_MAXSPC ('D' << 8 | XH_DL_MAXSPC) /* max. bpb->clsiz */
/* in Big-DOS z. Z.: 64 */
#define DL_CLUSTS ('D' << 8 | XH_DL_CLUSTS) /* max. bpb->numcl 16-Bit-FAT */
/* in Big-DOS z. Z.: 65518 = 16$FFEE */
#define DL_MAXSEC ('D' << 8 | XH_DL_MAXSEC) /* max. Anzahl Sektoren */
/* in Big-DOS z. Z.: 16$FFFFFF */
#define DL_DRIVES ('D' << 8 | XH_DL_DRIVES) /* max. Anzahl Laufwerke */
/* in Big-DOS z. Z.: 32 */
#define DL_CLSIZB ('D' << 8 | 8) /* max. bpb->clsizb */
/* in Big-DOS z. Z.: 32768 = 16$8000 */
#define DL_RDLEN ('D' << 8 | 9) /* max. (bpb->rdlen * bpb->recsiz / 32) */
/* in Big-DOS z. Z.: 2032 */
#define DL_FSIZ ('D' << 8 | 10) /* max. bpb->fsiz */
/* in Big-DOS z. Z.: 256 */
#define DL_FATREC ('D' << 8 | 11) /* max. bpb->fatrec */
/* in Big-DOS z. Z.: 512 */
#define DL_CLUSTS12 ('D' << 8 | 12) /* max. bpb->numcl 12-Bit-FAT */
/* in Big-DOS z. Z.: 4078 = 16$FEE */
#define DL_CLUSTS32 ('D' << 8 | 13) /* max. bpb->numcl 32-Bit-FAT */
/* in Big-DOS z. Z.: 0 */
#define DL_BFLAGS ('D' << 8 | 14) /* unterstützte Bits in bpb->bflags */
/* in Big-DOS z. Z.: 2$11 */
#define DL_FILESYS ('D' << 8 | 15) /* (XBRA-)Kennung des Dateisystems */
/* in Big-DOS: 'BDOS' */
#define DL_VERSION ('D' << 8 | 16) /* Version des Dateisystems */
/* in Big-DOS z. Z.: 19950401 */
#define DL_CHAR ('D' << 8 | 17) /* Zeiger auf String mit erlaubten Zeichen */
/* Erlaubte Namen auf GEMDOS: */
/* »!\"#$%&'()+,-0..9;<=>@A..Z[]^_`{|}~ÇÄÅÉÆÖÜ¢£¥Ñªº¿¬½¼¡«»βµ±÷°·²« */
/* Erlaubte Namen auf ISO 9293: */
/* »0..9A..Z_« */
/* Erlaubte Namen auf MS-DOS: */
/* »!#$%&'()-0..9@A..Z^_`{}~ÇÄÅÉÆÖÜ¢£¥Ñªº¿¬½¼¡«»βµ±÷°·²« */
/* Erlaubte Namen auf GEMDOS und Kleinbuchstaben: */
/* »!\"#$%&'()+,-0..9;<=>@A..Z[]^_`a..z{|}~ÇÄÅÉÆÖÜ¢£¥Ñªº¿¬½¼¡«»βµ±÷°·²« */
#define DL_SETCHAR ('D' << 8 | 18) /* Erlaubte Namen setzen oder abfragen */
/* arg = -1: Erlaubte Namen abfragen */
/* arg = 0: Erlaubte Namen auf GEMDOS setzen */
/* arg = 1: Erlaubte Namen auf ISO 9293 (oder 9660) d-Zeichen setzen */
/* arg = 2: Erlaubte Namen auf MS-DOS setzen */
/* arg = 3: Erlaubte Namen auf GEMDOS und Kleinbuchstaben setzen */
/* arg = 4: Erlaubte Namen auf VFAT setzen, reserviert */
Dcntl(KER_DOSLIMITS, ...) aus MagiC 3
-------------------------------------
#define KER_DOSLIMITS 0x101 /* Kernel: Limits für FAT-Dateisysteme */
Big-DOS kennt diese Funktion auch.
Mögliche Probleme (auch bei MagiC!):
∙ MetaDOS greift bei Dcntl() _immer_ auf den Pfad zu! Daher muß auf jeden Fall
ein gültiger Zeiger auf einen Pfad übergeben werden!
∙ Da das Minix-Dateisystem schon länger eine Unterfunktion mit der gleichen
Nummer kennt, muß dies ein Pfad sein, bei dem das Minix-Dateisystem
garantiert nicht angesprochen wird. Das ist der Kernel-Pfad "U:\".
(Minix-Pfade beginnen mit "#:\" oder "U:\#\", dabei ist # eine
Laufwerkskennung ungleich "U".)
∙ Wenn MiNT aktiv ist, dann ist es möglich, daß Dcntl() eine andere
Fehlermeldung als EINVFN zurückgibt. Daher nicht auf ungleich EINVFN testen!
MX_DOSLIMITS *p_DOS_limits;
p_DOS_limits = (MX_DOSLIMITS *)Dcntl(KER_DOSLIMITS, "U:\", 0L);
if ((ULONG)p_DOS_limits < 0xFFFFFF00UL) {
/* Zeiger ist gültig */
...
}
clr.l -(SP)
pea Kernelpfad
move.w #$101
move.w #$130
trap #1
lea 12(SP),SP
; Vorzeichenlos größer als (unsigned long)(-256L) kann keine
; gültige Adresse sein, sondern ist eine Fehlermeldung.
cmp.l #$FFFFFF00,D0
bhs kein_KER_DOSLIMITS
...
kein_KER_DOSLIMITS:
Kernelpfad: dc.b "U:\", 0
Autor, Adresse
--------------
MausNet: Rainer Seitel @ KA
Internet: Rainer_Seitel@ka.maus.de (bevorzugt, keine Mail > 16 KByte pro Tag!)
Rainer.Seitel@stud.uni-karlsruhe.de
http://www.uni-karlsruhe.de/~Rainer.Seitel/bigdos.html
http://wwwrzstud.rz.uni-karlsruhe.de/~ujo7/bigdos.html (für Links diese nehmen)
(http://129.13.95.1/~ujo7/bigdos.html)